package main

////匿名函数
///*
//	匿名函数可看作函数的字面量
//	所有直接使用函数类型变量的地方都可以用匿名函数代替
//	匿名函数可以直接赋值给函数变量		可当中实参，也可作为返回值	还可以直接被调用
//*/
//
////匿名函数被直接赋值函数变量
//var sum = func(a, b int) int {
//	return a + b
//}
//
//func doInput(f func(int, int) int, a, b int) int {
//	return f(a, b)
//}
//
////匿名函数作为返回值
//func wrap(op string) func(int, int) int {
//	switch op {
//	case "add":
//		return func(a, b int) int {
//			return a + b
//		}
//	case "sub":
//		return func(a, d int) int {
//			return a - d
//		}
//	default:
//		return nil
//	}
//}
//
//func main() {
//	//匿名函数直接被调用
//	defer func() {
//		if err := recover(); err != nil {
//			fmt.Println(err)
//		}
//	}()
//
//	fmt.Println(sum(1, 2))
//
//	//匿名函数作为实参
//	fmt.Println(doInput(func(x, y int) int {
//		return x + y
//	}, 1, 2))
//
//	opFunc := wrap("add")
//	er := opFunc(2, 3)
//	fmt.Println(er)
//}
